package com.study.ssm.scope;

import com.study.ssm.UnitTestBase;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;

/**
 * <pre>
 *     project name: SpringStudy
 *     author      : 李琼
 *     e-mail      : 1265137718@qq.com
 *     create time : 2017/9/14 下午11:52
 *     desc        : 描述--//BeanScopeTest TODO
 *     URL         : CSDN:http://blog.csdn.net/qq_22945151
 *                   GitHub:https://github.com/a1265137718
 *     Reference   ://
 *     modifier               :
 *     modification time      :
 *     modify remarks         :
 *
 *     @version: --//TODO
 * </pre>
 */

@RunWith(BlockJUnit4ClassRunner.class)
public class BeanScopeTest extends UnitTestBase{
    public BeanScopeTest(){
        super("classpath*:./resources/spring-scope.xml");
    }

    @Test
    public void testScopeSingleton(){
        // 通过控制台打印的数据可知,两次打印的hashCode码是一样的 ,这就是singleton模式
        // 值得提到的一点,如果执行Test方法时,选择执行的是所有测试方法,
        // 那么ClassPathXmlApplicationContext会在一个Test方法执行
        // 完毕后关闭(Refreshing -> Loading -> Refreshing),然后再次创建一个ClassPathXmlApplicationContext
        // 的实例,因此会打印出不同的hashCode,实际上在每一个Test方法执行前后,都会调用@before 和 @after

        BeanScope beanScope = super.getBean("beanScopeSingleton");
        beanScope.say();

        BeanScope beanScope2 = super.getBean("beanScopeSingleton");
        beanScope2.say();
    }

    @Test
    public void testScopeSingleton2(){
        BeanScope beanScope = super.getBean("beanScopeSingleton");
        beanScope.say();
    }

    @Test
    public void testScopeProtype(){
        //
        BeanScope beanScopePrototype = super.getBean("beanScopePrototype");
        beanScopePrototype.say();

        BeanScope beanScopePrototype2 = super.getBean("beanScopePrototype");
        beanScopePrototype2.say();

    }
}